﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using tea.Models;
using tea.DB;
using tea.BL;

namespace tea.Controllers
{

    [Authorize(Roles = BL사용자.ADMIN_OR_STAFF)]
    public class RecruitController : Controller
    {
        [HttpGet]
        public ActionResult List()
        {
            using (var db = new DBDataContext()) {
                var 목록 = db.채용.Where(p => p.ID > 0) // 정보: 계약 내용 저장을 위한 더미 레코드의 ID가 0
                                  .OrderByDescending(p => p.ID)
                                  .Select(p => new 채용Model(p, false) { 지원자수 = p.지원.Count })
                                  .ToList();
                return View(목록);
            }
        }

        [HttpGet]
        public ActionResult New()
        {
            using (var db = new DBDataContext()) {
                var 채용 = db.채용.OrderByDescending(p => p.ID).FirstOrDefault();
                if (채용 == null) throw new Exception("0번 채용 데이터 삭제됨");

                var 모델 = new 채용Model(채용);
                모델.ID = 0;
                모델.번호++;
                모델.신청기간1 = DateTime.Now;
                모델.신청기간2 = DateTime.Now;
                모델.임용년도 = DateTime.Now.Year + 1;
                return View("Edit", 모델);
            }
        }

        [HttpGet]
        public ActionResult Edit(int id)
        {
            using (var db = new DBDataContext()) {
                var 채용 = db.채용.Single(p => p.ID == id);
                var 모델 = new 채용Model(채용);
                return View(모델);
            }
        }

        [HttpPost]
        [Util.AjaxOnly]
        [ValidateInput(false)]
        public ActionResult Save(채용Model 모델)
        {
            using (var db = new DBDataContext()) {
                if (모델.ID == 0) {
                    var 신규채용 = new DB.채용();
                    채용Model.Copy(from: 모델, to: 신규채용, 내용포함: true);
                    신규채용.번호 = db.채용.Max(p => p.번호) + 1;
                    db.채용.InsertOnSubmit(신규채용);
                    db.SubmitChanges();
                    BL파일.이미지첨부정보_저장(db, 신규채용.내용, 신규채용.ID, BL파일.파일첨부_채용내용이미지);
                    db.SubmitChanges();
                } else {
                    var 기존채용 = db.채용.FirstOrDefault(p => p.ID == 모델.ID);
                    if (기존채용 == null) return Json(Consts.Ajax작업실패);
                    채용Model.Copy(from: 모델, to: 기존채용, 내용포함: true);
                    BL파일.이미지첨부정보_저장(db, 기존채용.내용, 기존채용.ID, BL파일.파일첨부_채용내용이미지);
                    db.SubmitChanges();
                }
                return Json(new AjaxSuccessModel(Url.Action("List", "Recruit")));
            }
        }

        [HttpPost]
        [Util.AjaxOnly]
        public ActionResult Delete(int id)
        {
            using (var db = new DBDataContext()) {
                var 채용 = db.채용.FirstOrDefault(p => p.ID == id);
                if (채용 == null) return Json(Consts.Ajax작업실패);
                if (채용.지원.Count > 0) return Json(Consts.Ajax채용삭제불가);
                
                db.채용.DeleteOnSubmit(채용);
                db.SubmitChanges();
                return Json(new AjaxSuccessModel(Url.Action("List", "Recruit")));
            }
        }

    }
}
